package com.lwc;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

//生产者  向mq 投递消息
public class Productor {
    public static void main(String[] args) throws IOException, TimeoutException {
//1创建连接工厂  设置连接信息
        ConnectionFactory factory=new ConnectionFactory();
factory.setHost("192.168.81.128");//连接主机
factory.setUsername("root");//默认是guest
 factory.setPassword("root");//默认是guest
factory.setPort(5672);//连接端口号
factory.setVirtualHost("erp");//虚拟主机

        //2用连接工厂创建连接
        Connection conn=factory.newConnection();

        //3创建信道
        Channel channel=conn.createChannel();

        //4.声明交换器    fanout 发布订阅
        // 名字和类型
        String exname="ex-routing";
channel.exchangeDeclare(exname, BuiltinExchangeType.DIRECT);

//声明队列名称
        String queue1="queue-error",queue2="queue-info";
/**
 * queue 队列名称
 * durable 是否持久化
 *  exclusive是否独占队列   为true 信道必须是同一连接创建的
 *autodelete  是否自动删除    前提队列中灭有消息
 *arguments 向队列传递的其他参数
 *
 */
        //5.声明队列
        channel.queueDeclare(queue1,true,false,false,null);
        channel.queueDeclare(queue2,true,false,false,null);

        //exchange 交换机的名称  在hello模式下为空
        // rotingKey 路由键的名称
        // props 附加在消息上的属性  如路由头
        // 将路由的名称设为路由键  props
        //body消息体

        //6.绑定交换器和队列
        channel.queueBind(queue1,exname,"error");
        channel.queueBind(queue2,exname,"info");
        channel.queueBind(queue1,exname,"info");


            //7.想交换机投递消息
        //投递信息到 error
channel.basicPublish(exname,"error", MessageProperties.PERSISTENT_TEXT_PLAIN,"起飞啦".getBytes());
//投递信息到 info
        channel.basicPublish(exname,"info",MessageProperties.PERSISTENT_TEXT_PLAIN,"回家".getBytes());
        System.out.println("消息已投递");


        //释放资源
        channel.close();
        conn.close();

    }
}
